#ifndef _BOARD_H_
#define _BOARD_H_

#include "hardwire.h"
#include "components\adc_keyboard\adc_keyboard.h"
#include "polsys_mcu.h"


// 定义表示使用自定义SPI驱动
#define BOARD_USE_CUST_SPI_DRV


void Board_Init();

void Board_Idle();

// 进入最低功耗状态并休眠
void Board_Sleep();

void Board_SetLcdBrightness(u8 br);

// 高电平：VBUS_TX = 0 时，VBUS高阻（注意外部上拉影响）。
#define Board_SetVBusHzLevel(l)     HalGpioSet(VBUS_HZ_PIN, (bit_action_e)l)

#define Board_SetLcdRsLevel(l)      HalGpioSet(LCD_RS_PIN, (bit_action_e)l)

#define Board_SetLcdBrLevel(l)      HalGpioSet(LCD_BR_PIN, (bit_action_e)l)

#define Board_GetDcIn()             HalGpioGet(DCIN_PIN)

// 默认
#define Board_VExtOn()             HalGpioSet(VEXT_EN_PIN, (bit_action_e)0)

#define Board_VExtOff()            HalGpioSet(VEXT_EN_PIN, (bit_action_e)1)

#define Board_SetVBusTX()   \
{\
    Board_SetVBusHzLevel(0); /*VBUS可输出低电平（受控于VBUS_TX）*/\
    VBUS_TX_PIN_UART1_TX;\
    VBUS_RX_PIN_AIN;/*避免收到自己发的数据*/\
}

#define Board_SetVBusRx()   \
{\
    Board_SetVBusHzLevel(1);/*VBUS不可输出低电平（VBUS_TX低电平=高阻）*/\
    VBUS_TX_PIN_GPIO_OUT_L;\
    VBUS_RX_PIN_UART1_RX;\
}

// 开始进行插头检测，并停止VBUS数据接收
// VBUS将平常输出低电平，插头检测时上拉
void Board_StartPlugCheck();

// 开始进行测量（产品发热丝电阻和电池电压）
void Board_StartMeasuring();

void Board_SendDataDp(u8 *buff, u8 len);

// 仅将VBUS输出高电平，注意插头检测会被关闭，并停止VBUS数据接收
void Board_SetVBusHigh();

// 仅将VBUS输出低电平，注意插头检测会被关闭，并停止VBUS数据接收
void Board_SetVBusLow();

// 发完数据后VBUS进入数据接收状态（上拉输入）
void Board_SendDataVBus(u8 *buff, u8 len);

// 是否插入产品
bool Board_IsPlugIn();

// 获取本机电池电压 mV
u16 Board_GetVBat();

// 获取键盘AD值
// u16 Board_GetKbValue();

u32 Board_GetRand();

#endif
